﻿
using System.Text.RegularExpressions;
using static K8.CBB.XID;

namespace KingerRobot.MexicoSailunMDC.SpiService;

internal class BMesProduct : IMesProduct
{
    private readonly static IProdProduct _ProdProduct = new BProdProduct();
    private readonly static IProdMaterial _ProdMaterial = new BProdMaterial();
    private readonly static IProdSku _ProdSku = new BProdSku();
    private readonly static IProdSkuProduct _ProdSkuProduct = new BProdSkuProduct();
    private readonly static IRcsEquip _RcsEquip = new BRcsEquip();
    private readonly static IRcsLocation _RcsLocation = new BRcsLocation();
    private readonly static IWcsLocSku _WcsLocSku = new BWcsLocSku();
    private readonly static IWms2MesService _Wms2MesService = new Wms2MesImpl();

    //public int CreateMesProduct(ProductBean product)
    //{
    //    // 同步MesProduct表
    //    var barCode = product.TireBarcode;
    //    var result = 0;

    //    try
    //    {
    //        result = SetMesProductInfo(product);

    //        if (result <= 0)
    //        {
    //            return result;
    //        }

    //        // 同步更新已绑定数据
    //        var prodProduct = _ProdProduct.GetProductByCode(barCode);
    //        if (prodProduct is null)
    //        {
    //            return result;
    //        }

    //        // 向关联表插入数据 需要插入本地表的materialId
    //        var material = _ProdMaterial.GetMaterialByMesId(product.MaterialId);
    //        if (material is null)
    //        {
    //            return result;
    //        }

    //        // 同步产品物料
    //        var mateiralId = material.Id.GetValueOrDefault();
    //        var MdEquipId = _RcsEquip.GetRcsEquipByCode(product.ProductEquip)?.Id ?? 0L;
    //        var productInfo = new POProdProduct()
    //        {
    //            ProductCode = product.TireBarcode,
    //            MdEquipId = MdEquipId,
    //            MaterialId = mateiralId,
    //            MdTime = product.ProductTime,
    //            GtStatus = product.QuailtyStatus == 1 ? ConstFields.UnQualifiedProductStatus : ConstFields.QualifiedProductStatus,
    //            TireLock = product.TireLock,
    //            ProductBatch = product.ProductBatch,
    //            UpdateTime = DateTime.Now
    //        };
    //        _ProdProduct.UpdateProduct(productInfo);


    //        // 更新 prodSkuProduct
    //        var productId = prodProduct.Id.GetValueOrDefault();
    //        var skuProduct = _ProdSkuProduct.GetProdSkuProductByProductId(productId);
    //        if (skuProduct is null)
    //        {
    //            return result;
    //        }
    //        _ProdSkuProduct.UpdateSkuProductMaterial(productId, mateiralId);

    //        // 更新 prodSku
    //        var skuId = skuProduct.SkuId.GetValueOrDefault();
    //        _ProdSku.UpdateProdSkuMateiral(skuId, mateiralId);


    //        // 更新 rcsLocation
    //        var wcsLocSku = _WcsLocSku.GetWcsLocSkuBySkuId(skuId);
    //        if (wcsLocSku is null)
    //        {
    //            return result;
    //        }
    //        var locId = wcsLocSku.LocId.GetValueOrDefault();
    //        _RcsLocation.UpdateLocationMateiralId(locId, mateiralId);
    //    }
    //    catch
    //    {
    //        WriteLog($"{barCode} 同步数据失败.");
    //    }
    //    return result;
    //}



    public TireInfo GetInfoByBarcode(string productCode)
    {
        var db = Db.Default;
        if (productCode is null)
        {
            return null;
        }
        var product = db.MesProducts.Where(t => t.BcdNo == productCode)
            .OrderByDescending(t => t.CreateTime)
            .Select(t => new TireInfo
            {
                TireCode = t.BcdNo,
                MaterialCode = t.MaterialCode,
                MaterialId = t.MaterialId ?? 0,
                //Height = Convert.ToInt32(t.HEIGHT ?? 0),
                Size = GetSize(t.TbmSpecDesc),
                ProdDt = t.ProdDt.Value,
                TbmNo = t.TbmNo,
                TbmPs = t.TbmPs,
                InPermit = t.InPermit,
                TbmExpirationTime = t.TbmExpirationTime,
                Height = t.Height ?? 0,
                TireLock = t.TireLock ?? 0,
                MesId = t.Id ?? 0,
            }).FirstOrDefault();
        return product;
    }

    /// <summary>
    /// 从规格描述中获取字母R后面的数字，即为尺寸
    /// </summary>
    /// <returns></returns>
    public static double GetSize(string materialDesc)
    {
        Match match = Regex.Match(materialDesc, @"R(\d+(?:\.\d+)?)");
        if (match.Success)
        {
            string text = match.Groups[1].Value;
            if (double.TryParse(text, out double size))
            {
                return size;
            }
        }

        return 0;
    }

    //public int CreateMesProduct(KingerRobot.MexicoSailunMES.Dao.POBcdInfo info) 
    //{
    //    var materialInfo = _ProdMaterial.AddProdMaterial(tireInfo);

    //    var db = Db.Default;
    //    var mesProduct = db.MesProducts.Where(t => t.BcdNo == info.BcdNo).FirstOrDefault();

    //    if (mesProduct is not null)
    //    {
    //        WriteLog("开始修改mes胎胚数据", true);
    //        try
    //        {
    //            mesProduct.TbmSpec = info.TbmSpec;
    //            mesProduct.TbmSpecDesc = info.TbmSpecDesc;
    //            mesProduct.TbmSpecVer = info.TbmSpecVer;
    //            mesProduct.TbmExpirationTime = info.TbmExpirationTime;
    //            mesProduct.TbmPs = info.TbmPs;
    //            mesProduct.TbmNo = info.TbmNo;
    //            mesProduct.ProdDt = info.ProdDt;
    //            mesProduct.StdWt = info.StdWt;
    //            mesProduct.MinWt = info.MinWt;
    //            mesProduct.MaxWt = info.MaxWt;
    //            mesProduct.InPermit = info.InPermit;
    //            mesProduct.RcvFlag = info.RcvFlag;
    //            mesProduct.RegDt = info.RegDt;
    //            //mesProduct.Rfid = info.Rfid;
    //            mesProduct.Relateequipmen = info.Relateequipment;
    //            mesProduct.Remarks = "";// info.re;
    //            mesProduct.MaterialId = materialInfo.Id;
    //            mesProduct.MaterialCode = materialInfo.MaterialCode;
    //            mesProduct.Height = info.HEIGHT ?? 0;
    //            //mesProduct.BcdNo = info.BcdNo;

    //            //db.MesProducts.Update(mesProduct);
    //            db.SaveChanges();
    //            return 1;
    //        }
    //        catch (Exception ex)
    //        {
    //            WriteLog($"开修改mes胎胚数据异常{ex.ToString()}", true);
    //            return 0;
    //        }
    //    }
    //    else
    //    {
    //        db.MesProducts.Insert(new POMesProduct
    //        {
    //            Id = XID.Nextval,
    //            BcdNo = info.BcdNo,
    //            TbmSpec = info.TbmSpec,
    //            TbmSpecDesc = info.TbmSpecDesc,
    //            TbmSpecVer = info.TbmSpecVer,
    //            TbmExpirationTime = info.TbmExpirationTime,
    //            TbmPs = info.TbmPs,
    //            TbmNo = info.TbmNo,
    //            ProdDt = info.ProdDt,
    //            StdWt = info.StdWt,
    //            MinWt = info.MinWt,
    //            MaxWt = info.MaxWt,
    //            InPermit = info.InPermit,
    //            RcvFlag = info.RcvFlag,
    //            RegDt = info.RegDt,
    //            Rfid = "",// info.Rfid,
    //            Relateequipmen = info.Relateequipment,
    //            Remarks = "",//info.Remarks,
    //            MaterialId = materialInfo.Id,
    //            MaterialCode = materialInfo.MaterialCode,
    //            Height = info.HEIGHT,
    //        });
    //        return 1;
    //    }
    //}
}

